home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / other / systracker_src / src / st_misc.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-02-28  |  3.2 KB  |  125 lines

  1. /***************************************************************************/
  2. /* st_misc.c - Misc routines.                                              */
  3. /*                                                                         */
  4. /* Copyright © 1999-2000 Andrew Bell. All rights reserved.                 */
  5. /***************************************************************************/
  6.  
  7. #include "SysTracker_rev.h"
  8. #include "st_include.h"
  9. #include "st_protos.h"
  10.  
  11. /***************************************************************************/
  12.  
  13. GPROTO ULONG R_GetTasksStackSize( void )
  14. {
  15.   /*********************************************************************
  16.    *
  17.    * R_GetTasksStackSize()
  18.    *
  19.    * Get the task's current stack size.
  20.    *
  21.    *********************************************************************
  22.    *
  23.    */
  24.  
  25.   register struct Task *Tsk = FindTask(NULL);
  26.   return (ULONG) Tsk->tc_SPUpper - (ULONG) Tsk->tc_SPLower;
  27. }
  28.  
  29. GPROTO BOOL R_DateStampToStr( struct DateStamp *DS, UBYTE *Buf )
  30. {
  31.   /*********************************************************************
  32.    *
  33.    * R_DateStampToStr()
  34.    *
  35.    * Construct a date string using a standard dos.library DateStamp
  36.    * structure. Example output: Friday 15-Oct-99 18:00:00
  37.    *
  38.    * Notes
  39.    * -----
  40.    * Buf should point to a buffer at least 128 bytes long!
  41.    *
  42.    *********************************************************************
  43.    *
  44.    */
  45.  
  46.   UBYTE DayPart[LEN_DATSTRING];
  47.   UBYTE DatePart[LEN_DATSTRING];
  48.   UBYTE TimePart[LEN_DATSTRING];
  49.  
  50.   struct DateTime MyDT =
  51.   {
  52.     { 0, 0, 0 },
  53.     FORMAT_DOS,
  54.     0,
  55.     NULL, NULL, NULL
  56.   };
  57.  
  58.   MyDT.dat_StrDay = DayPart;
  59.   MyDT.dat_StrDate = DatePart;
  60.   MyDT.dat_StrTime = TimePart;
  61.   DayPart[0] = 0; DatePart[0] = 0; TimePart[0] = 0;
  62.   MyDT.dat_Stamp.ds_Days   = DS->ds_Days;
  63.   MyDT.dat_Stamp.ds_Minute = DS->ds_Minute;
  64.   MyDT.dat_Stamp.ds_Tick   = DS->ds_Tick;
  65.  
  66.   if (DateToStr((struct DateTime *) &MyDT))
  67.   {
  68.     sprintf(Buf, "%s %s %s",
  69.       (UBYTE *) &DayPart, (UBYTE *) &DatePart, (UBYTE *) &TimePart);
  70.     return TRUE;
  71.   }
  72.  
  73.   return FALSE;
  74. }
  75.  
  76. GPROTO BOOL R_IsTaskPtrValid( struct Task *TaskPtr )
  77. {
  78.   /*********************************************************************
  79.    *
  80.    * R_IsTaskPtrValid()
  81.    *
  82.    * Determine if a Task/Process pointer is still valid. This routine
  83.    * should be called under a Forbid()/Premit() pair.
  84.    *
  85.    * Warning
  86.    * -------
  87.    *
  88.    * This routine is a bit hacky , because it accesses the private
  89.    * exec lists in execbase.
  90.    *
  91.    * Notes
  92.    * -----
  93.    *
  94.    * SysTracker will only ever call this routine when the 
  95.    * cfg_BeSystemLegal BOOL is FALSE.
  96.    *
  97.    *********************************************************************
  98.    *
  99.    */
  100.  
  101.   register struct Task *TaskNode = NULL;
  102.   register BOOL Found = FALSE;
  103.  
  104.   Disable();
  105.  
  106.   for (TaskNode = (struct Task *) SysBase->TaskReady.lh_Head;
  107.        TaskNode->tc_Node.ln_Succ;
  108.        TaskNode = (struct Task *) TaskNode->tc_Node.ln_Succ)
  109.   {
  110.     if (TaskPtr == TaskNode) Found = TRUE;
  111.   }
  112.  
  113.   if (!Found)
  114.     for (TaskNode = (struct Task *) SysBase->TaskWait.lh_Head;
  115.          TaskNode->tc_Node.ln_Succ;
  116.          TaskNode = (struct Task *) TaskNode->tc_Node.ln_Succ)
  117.     {
  118.       if (TaskPtr == TaskNode) Found = TRUE;
  119.     }
  120.  
  121.   Enable();
  122.   return Found;
  123. }
  124.  
  125.